package q2131_longestPalindrome;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Solution_1 {
    /*
    考虑使用hash表的方式来解决该问题
    在遍历数组的同时记录当前的单词及其出现的次数
    如果遇到一个单词 map中已记录了其翻转的单词 那么就相当于将当前的单词和其翻转的单词 "消耗" 掉
    同时需要考虑一个问题 如果一个单词 是 aa 类型的 也就是前后字符一样 那么就将其记录到set中
    最后遍历set 看是否有余下的没有被消耗的aa类型单词 如果有 那么就相当于将这个单词插入到回文字符串的中间
    答案就是ans + 2 否则就是 ans
     */
    public int longestPalindrome(String[] words) {
        Map<String, Integer> map = new HashMap<>();
        int ans = 0;
        Set<String> set = new HashSet<>();
        for (int i = 0; i < words.length; i++) {
            StringBuilder reverseWord = new StringBuilder(words[i]).reverse();
            if (map.containsKey(reverseWord.toString()) && map.get(reverseWord.toString()) > 0){
                ans += 4;
                map.put(reverseWord.toString(), map.get(reverseWord.toString()) - 1);
                map.put(words[i], map.getOrDefault(words[i], 0) - 1);
            }
            if (reverseWord.toString().equals(words[i])) set.add(reverseWord.toString());

            map.put(words[i], map.getOrDefault(words[i], 0) + 1);
        }
        for (String s : set) {
            if (map.get(s) > 0) return ans + 2;
        }
        return ans;
    }

    public static void main(String[] args) {
        String[] ss = {"dd","aa","bb","dd","aa","dd","bb","dd","aa","cc","bb","cc","dd","cc"};
        Solution_1 s = new Solution_1();
        s.longestPalindrome(ss);
    }
}
